# 单例模式1
# 用函数的方式写一个 单例
class SinglePerson(object):

    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super().__new__(cls, *args, **kwargs)
        return cls._instance


if __name__ == '__main__':
    p1 = SinglePerson()
    # p1 实例化的时候，先调用 __new__ 私有函数
    p2 = SinglePerson()

    # is 比较的是内存中是不是一个对象，内存地址是否一样
    print(p1 is p2)  # True

    print(p1, p2)
    # <__main__.SinglePerson object at 0x0000016EC64D58E0>
    # <__main__.SinglePerson object at 0x0000016EC64D58E0>
